package com.iluwatar;

/**
 * 
 * In Command pattern actions are objects that can be executed and undone. 
 * 在命令模式中，命令是可以被执行和撤销的对象。
 * In this example the commands are the spells cast by the wizard on the goblin.
 * 在这个例子里，命令是由男巫施加到小精灵身上的妖术
 */
public class App {

	public static void main(String[] args) {
		Wizard wizard = new Wizard();//男巫出来了
		Goblin goblin = new Goblin();//小精灵出来了

		goblin.printStatus();//看看小精灵长什么样

		wizard.castSpell(new ShrinkSpell(), goblin);//男巫对小精灵使出收缩妖术
		goblin.printStatus();//再看看小精灵长什么样

		wizard.castSpell(new InvisibilitySpell(), goblin);//男巫对小精灵使出另起消失的妖术
		goblin.printStatus();//再看看小精灵长什么样
		wizard.undoLastSpell();//男巫撤销了上次的魔法
		goblin.printStatus();//小精灵的样子
	}
}
